/**
 * weapp-js v1.7.1(2021-4-16)
 * https://codeup.aliyun.com/motigo/motigo/weapp_base
 * Copyright@ 2021 Motigo, Inc.
 * 
 */
// 录音接口封状

export class recordAuthorizeManager{
    /*
        录音授权管理
    */

    constructor(){}

    reAuthorize(opt){
        /*
          重新授权
        */
        opt = opt || {}
        wx.openSetting({
            success: (res)=>{
                var __auth__ = res.authSetting["scope.record"];
                if(__auth__ == true){
                    opt && opt.success && opt.success()
                }
                else{
                    opt && opt.fail && opt.fail()
                }
            },
            fail:()=>{
                opt && opt.fail && opt.fail()
            }
        })
    }

    __askAuthorize(opt){
        /*
            弹出授权提示弹框
        */
        opt = opt || {}
        var showCancel = opt.showCancel;
        if(showCancel == undefined){
            showCancel = true;
        }
        wx.showModal({
            title: '提示',
            content: '您未授权录音，部分功能将无法使用',
            showCancel:showCancel,
            confirmText:"去授权",
            cancelText:"暂不授权",
            success:(res)=>{
                if(res.confirm){
                    opt && opt.confirm && opt.confirm()
                }
                else{
                    opt && opt.reject && opt.reject()
                }
            }
        })

    }

    askAuthorize(opt){
        /*
            弹出授权提示弹框：一般性询问，允许用户拒绝
        */
        opt = opt || {}
        var __opt__ = {}

        if(opt && typeof opt == "object"){
            __opt__ = Object.assign({},opt)
        }
        __opt__.showCancel = true;
        this.__askAuthorize(__opt__)
    }

    askAuthorizeUtilSuccess(opt){
        /*
            弹出授权提示弹框，引导用户去打开授权，直到成功：不允许拒绝
        */
        opt = opt || {}
        var __opt__ = {
            "showCancel":false,
            "confirm":()=>{
                this.reAuthorize({
                    fail:()=>{
                        // 重新授权失败，自己调用自己
                        this.askAuthorizeUtilSuccess(opt)
                    },
                    success: ()=>{
                        // 授权终于成功了
                        opt && opt.success && opt.success();
                    }
                })
            }
        }
        this.__askAuthorize(__opt__)
    }

    checkAuthorize(opt){
        /*
            检查录音授权情况
        */
        opt = opt || {}
        wx.getSetting({
            success:(res)=>{
                var __auth__ = res.authSetting["scope.record"];
                if(__auth__ === undefined ){
                    // 用户从未授权过，也从未拒绝过；或者清除了之前的授权信息
                    opt && opt.beforeShowAuthModal && opt.beforeShowAuthModal()
                    wx.authorize({
                        scope:"scope.record",
                        success: ()=>{
                            // 用户已经同意小程序使用录音功能，后续调用 wx.startRecord 接口不会弹窗询问
                            opt && opt.success && opt.success()
                        },
                        fail:()=>{
                            // 用户拒绝授权
                            opt && opt.fail && opt.fail()
                            opt && opt.firstfail && opt.firstfail()
                        }
                    })
                }

                else if(__auth__ == false){
                    // 用户第一次授权的时候，拒绝了；或者在使用过程中，打开授权面板，关闭了授权
                    opt && opt.fail && opt.fail()
                    opt && opt.refail && opt.refail()
                }
                else if(__auth__ == true){
                    opt && opt.success && opt.success()
                }
            },
        })
    }

    checkAuthorizeAndAskAuthorizeUtilSuccess(opt){
        /*
          检查录音授权情况，如果没有授权，一直弹出授权请求，直到用户授权
        */

        opt = opt || {}

        var __fail__ = ()=>{
            this.askAuthorizeUtilSuccess(opt)
        }
        this.checkAuthorize({
            success:opt.success,
            fail:__fail__,
            beforeShowAuthModal:opt.beforeShowAuthModal,
        })
    }
}
